#ifndef CLTCONNECTION_H_
#define CLTCONNECTION_H_

//boost headers
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <string>
#include <vector>



//! CLTConnection
/*!
	Trieda sluzi na reprezentovania jedneho spojenia s serverom
*/
class CLTConnection : public boost::enable_shared_from_this<CLTConnection>
{
	public:
		//! Konstruktor
		/*!
			\param theData ake kolvek data typu T
		*/
		CLTConnection(boost::asio::io_service& io_service);


		//! GetSocket
		/*!
			Navrati socket patriaci danemu spojeniu
			\return boost::asio::ip::tcp::socket
		*/
		boost::asio::ip::tcp::socket& GetSocket();


		//! Write(asynchronous)
		/*!
			Funkcia na asynchronny zapis, teda do sietoveho spojenia
			\param DataContainer
		*/
		void Write(std::string input);

		void Write(std::vector<char> *input);


		//! Read(asynchronous)
		/*!
			Funkcia na asynchronny citanie z sietoveho spojenia
			\param DataContainer
		*/
		void Read(/*doplnit to co budeme citat DataContainer*/);

	private:
		//////////////////////////////////////////////////////////////////////////
		//							MEMBER FUNCTIONS
		//////////////////////////////////////////////////////////////////////////
		void handle_write(const boost::system::error_code& er, size_t send);

		//////////////////////////////////////////////////////////////////////////
		//							MEMBER VARIABLES
		//////////////////////////////////////////////////////////////////////////
		boost::asio::ip::tcp::socket mySocket;
		/*aditional members will come here*/
};


typedef boost::shared_ptr<CLTConnection> CLTConnection_ptr;


#endif
